package com.cotasul.tela;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.cotasul.bean.FornecedorBean;
import com.cotasul.bean.TipoBean;
import com.cotasul.bean.UsuarioBean;
import com.cotasul.negocio.FornecedorServico;
import com.cotasul.negocio.TipoServico;
import com.cotasul.negocio.UsuarioServico;
import com.cotasul.negocio.interfaces.IServicoGenerico;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
@ManagedBean
@ViewScoped
public class FornecedorTela extends TelaAbstrata {

	private FornecedorServico<FornecedorBean> fornecedorServico;
	
	private UsuarioServico<UsuarioBean> usuarioServico;

	private FornecedorBean fornecedor;
	
	private TipoServico<TipoBean> tipoServico;
	
	private UsuarioBean usuario;
	
	private List<FornecedorBean> fornecedores;
	
	private TipoBean tipo;

	public FornecedorTela() {
		try {
			usuario = usuario == null ? (UsuarioBean) ((HttpSession) FacesContext
					.getCurrentInstance().getExternalContext()
					.getSession(false)).getAttribute("usuario")
					: usuario;

			fornecedorServico = new FornecedorServico<FornecedorBean>();
			usuarioServico = new UsuarioServico<UsuarioBean>();
			tipoServico = new TipoServico<TipoBean>();
			tipo = new TipoBean();
			fornecedor = new FornecedorBean();
			fornecedor.setUsuario(usuario);
			fornecedor.setTipo(tipo);
			fornecedores = new ArrayList<FornecedorBean>();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void filtraFornecedores(){
		try{
			fornecedores = fornecedorServico.filtraFornecedores(fornecedor);
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public void excluirFornecedor(Object o){
		try{
			fornecedorServico.excluir((FornecedorBean) o);
			fornecedores = fornecedorServico.filtraFornecedores(fornecedor);
		} catch (MySQLIntegrityConstraintViolationException e) {

			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					this.getServico().getValor("msg_header_erro"), this
							.getServico().getValor(
									"msg_erro_fornecedor_exclui_1"));
			FacesContext.getCurrentInstance().addMessage(null, msg);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void alterarBloqueio(FornecedorBean o){
		try{
			this.usuarioServico.alterarBloqueio(o.getUsuario());
			filtraFornecedores();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public void aprovaFornecedor(Object o){
		try{
			fornecedorServico.aprovaFornecedor((FornecedorBean)o);
			fornecedores = fornecedorServico.filtraFornecedores(fornecedor);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public List<TipoBean> getPreencheCombo(){
		try {
			return tipoServico.buscaTipos();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@SuppressWarnings("rawtypes")
	@Override
	protected IServicoGenerico getServico() {
		return this.fornecedorServico;
	}

	public FornecedorServico<FornecedorBean> getFornecedorServico() {
		return fornecedorServico;
	}

	public void setFornecedorServico(
			FornecedorServico<FornecedorBean> fornecedorServico) {
		this.fornecedorServico = fornecedorServico;
	}

	public FornecedorBean getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(FornecedorBean fornecedor) {
		this.fornecedor = fornecedor;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}
	
	public void setFornecedores(List<FornecedorBean> fornecedores) {
		this.fornecedores = fornecedores;
	}
	
	public List<FornecedorBean> getFornecedores() {
		return fornecedores;
	}
	
	public void setTipoServico(TipoServico<TipoBean> tipoServico) {
		this.tipoServico = tipoServico;
	}
	
	public TipoServico<TipoBean> getTipoServico() {
		return tipoServico;
	}
	
	public TipoBean getTipo() {
		return tipo;
	}
	
	public void setTipo(TipoBean tipo) {
		this.tipo = tipo;
	}

}
